package gat.common.util;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelUtils {


        /**
         * 解析Excel文件为指定对象的集合
         *
         * @param file        上传的Excel文件
         * @param clazz       目标对象类型
         * @param ignoreHeader 是否忽略标题行
         * @param <T>         泛型类型
         * @return 解析后的对象集合
         * @throws IOException 文件读取异常
         */
        public static <T> List<T> parseExcelToEntityList(MultipartFile file, Class<T> clazz, boolean ignoreHeader, Integer sheetIndex) throws IOException {
            List<T> result = new ArrayList<>();

            // 使用EasyExcel读取Excel
            EasyExcel.read(file.getInputStream())
                    .head(clazz)
                    .sheet(sheetIndex) // 只读取第0个sheet
                    .headRowNumber(ignoreHeader ? 1 : 0) // 设置标题行数量，1表示跳过第一行
                    .registerReadListener(new ReadListener<T>() {
                        @Override
                        public void invoke(T data, AnalysisContext context) {
                            result.add(data); // 逐行读取数据并添加到集合
                        }

                        @Override
                        public void doAfterAllAnalysed(AnalysisContext analysisContext) {

                        }

                    })
                    .doRead();

            return result;
        }


}
